from time import sleep

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get('http://localhost/myweb/jxc/index.asp')

# 定位用户名输入元素 —— 初始的焦点位置
u_name = driver.find_element_by_name('username')
# 输入用户名
u_name.send_keys('admin')

# 实现策略：
# 1. 实例化ActionChains
# 2. 移动到初始焦点元素位置
# 3. 按下 Tab 键，切换焦点，自动定位到下一个元素（密码框）
# 4. 在下一个元素中输入内容: 密码输入admin
# 5. 再次按下 Tab键，切换焦点，定位于登录按钮
# 6. 点击登录按钮
# 7. 执行以上所有链表中的行为

# 错误写法一
#  关于click问题
#   1. 这一系列动作都是先存储好，在 perform时候才执行
#   2. click这个方法，如果不输入参数，则默认点击当前焦点元素
#   3. 当前焦点元素在 “用户名”编辑框
# ActionChains(driver).move_to_element(u_name).\
#     send_keys(Keys.TAB).send_keys('admin').\
#     send_keys(Keys.TAB).click().perform()


# 错误写法二
#   click方法，输入一个参数：当前活动元素
#   目的：验证当前活动（焦点）元素仍旧在用户名输入框，而不在提交按钮上
# ActionChains(driver).move_to_element(u_name).\
#     send_keys(Keys.TAB).send_keys('admin').\
#     send_keys(Keys.TAB).\
#     click(driver.switch_to.active_element).perform()


# 解决
# 1. 先切换到目的元素（提交按钮），执行
# 2. 在点击提交按钮

#  从用户名切换焦点到密码，输入密码，再切换焦点到提交按钮
#  注意：不能点击
#  此句执行后（perform），焦点元素才切换到提交按钮上
ActionChains(driver).move_to_element(u_name).\
    send_keys(Keys.TAB).send_keys('admin').\
    send_keys(Keys.TAB).perform()

#  点击当前焦点元素
ActionChains(driver).click(driver.switch_to.active_element).perform()

